package com.microservice.api.wechat;

import com.microservice.api.common.Result;
import com.microservice.api.wechat.dto.TokenResponse;
import com.microservice.api.wechat.dto.TokenStatusResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.Map;

/**
 * 微信服务API接口
 * 定义wechat-service对外提供的所有接口
 * 
 * @author common-api
 */
@FeignClient(name = "wechat-service", contextId = "wechatServiceApi", path = "/wechat")
public interface WechatServiceClient {
    
    /**
     * 获取指定AppID的Token
     * 
     * @param appId 微信AppID
     * @return Token信息
     */
    @GetMapping("/token/{appId}")
    Result<TokenResponse> getToken(@PathVariable("appId") String appId);
    
    /**
     * 强制刷新指定AppID的Token
     * 
     * @param appId 微信AppID
     * @return 刷新结果
     */
    @PostMapping("/token/refresh/{appId}")
    Result<String> refreshToken(@PathVariable("appId") String appId);
    
    /**
     * 批量刷新所有Token
     * 
     * @return 刷新结果
     */
    @PostMapping("/token/refresh-all")
    Result<String> refreshAllTokens();
    
    /**
     * 查看所有Token状态
     * 
     * @return Token状态信息（Map key为appId，value为TokenStatusResponse）
     */
    @GetMapping("/token/status")
    Result<Map<String, TokenStatusResponse>> getTokenStatus();
    
    /**
     * 随机获取一个Token（负载均衡）
     * 
     * @return Token信息
     */
    @GetMapping("/token/random")
    Result<TokenResponse> getRandomToken();
    
    /**
     * 根据类型随机获取Token
     * 
     * @param type 配置类型（official_account/mini_program/work_wechat）
     * @return Token信息
     */
    @GetMapping("/token/random/{type}")
    Result<TokenResponse> getRandomTokenByType(@PathVariable("type") String type);
}
